home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!lll-winken!ames!pasteur!ucbvax!decwrl!wyse!mikew
- From: mikew@wyse.wyse.com (Mike Wexler)
- Newsgroups: comp.sources.x
- Subject: v03i023: Ardent Window Manager, Patchlevel 9, Part07/12
- Message-ID: <2073@wyse.wyse.com>
- Date: 20 Feb 89 22:24:40 GMT
- Organization: Wyse Technology, San Jose
- Lines: 1759
- Approved: mikew@wyse.com
-
- Submitted-by: kmw@ardent (Ken Wallich)
- Posting-number: Volume 3, Issue 23
- Archive-name: awm2/part07
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 7 (of 12)."
- # Contents: Cursors.c Icons.c Makefile.rtl RubberBand.c
- # menus/rtlmenu.c
- # Wrapped by mikew@wyse on Fri Feb 17 10:50:27 1989
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'Cursors.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Cursors.c'\"
- else
- echo shar: Extracting \"'Cursors.c'\" \(4232 characters\)
- sed "s/^X//" >'Cursors.c' <<'END_OF_FILE'
- X
- X
- X
- X#ifndef lint
- Xstatic char *rcsid_StoreCursors_c = "$Header: /usr/graph2/X11.3/contrib/windowmgrs/awm/RCS/Cursors.c,v 1.1 89/01/23 15:34:10 jkh Exp $";
- X#endif lint
- X
- X#include "X11/copyright.h"
- X/*
- X *
- X * Copyright 1987, 1988 by Ardent Computer Corporation, Sunnyvale, Ca.
- X *
- X * Copyright 1987 by Jordan Hubbard.
- X *
- X *
- X * All Rights Reserved
- X *
- X * Permission to use, copy, modify, and distribute this software and its
- X * documentation for any purpose and without fee is hereby granted,
- X * provided that the above copyright notice appear in all copies and that
- X * both that copyright notice and this permission notice appear in
- X * supporting documentation, and that the name of Ardent Computer
- X * Corporation or Jordan Hubbard not be used in advertising or publicity
- X * pertaining to distribution of the software without specific, written
- X * prior permission.
- X *
- X */
- X
- X/*
- X * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- X *
- X * All Rights Reserved
- X *
- X * Permission to use, copy, modify, and distribute this software and its
- X * documentation for any purpose and without fee is hereby granted,
- X * provided that the above copyright notice appear in all copies and that
- X * both that copyright notice and this permission notice appear in
- X * supporting documentation, and that the name of Digital Equipment
- X * Corporation not be used in advertising or publicity pertaining to
- X * distribution of the software without specific, written prior permission.
- X *
- X *
- X * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- X * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- X * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- X * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- X * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- X * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- X * SOFTWARE.
- X */
- X
- X
- X
- X/*
- X * MODIFICATION HISTORY
- X *
- X * 000 -- M. Gancarz, DEC Ultrix Engineering Group
- X * 001 -- Loretta Guarino Reid, DEC Ultrix Engineering Group
- X * Convert to X11
- X * 1.2 -- Gumby cursor added (This was a major revision).
- X */
- X
- X#ifndef lint
- Xstatic char *sccsid = "@(#)StoreCursors.c 3.8 1/24/86";
- X#endif
- X
- X#include "awm.h"
- X#include "X11/cursorfont.h"
- X
- X/*
- X * Store all the cursors into global variables.
- X */
- XStoreCursors()
- X{
- X Entry("StoreCursors")
- X
- X /*
- X * Main awm cursor and movement cursor.
- X */
- X ArrowCrossCursor = XCreateFontCursor(dpy, XC_fleur);
- X if (ArrowCrossCursor == FAILURE) {
- X Error("StoreCursors -> Unable to store ArrowCrossCursor.");
- X }
- X
- X /*
- X * Text cursor used in icons.
- X */
- X TextCursor = XCreateFontCursor(dpy, XC_xterm);
- X if (TextCursor == FAILURE) {
- X Error("StoreCursors -> Unable to store TextCursor.");
- X }
- X
- X /*
- X * Icon cursor used to iconify windows.
- X */
- X IconCursor = XCreateFontCursor(dpy, XC_icon);
- X if (IconCursor == FAILURE) {
- X Error("StoreCursors -> Unable to store IconCursor.");
- X }
- X
- X /*
- X * Left button main cursor.
- X */
- X LeftButtonCursor = XCreateFontCursor(dpy, XC_leftbutton);
- X if (LeftButtonCursor == FAILURE) {
- X Error("StoreCursors -> Unable to store LeftButtonCursor.");
- X }
- X
- X /*
- X * Middle button main cursor.
- X */
- X MiddleButtonCursor = XCreateFontCursor(dpy, XC_middlebutton);
- X if (MiddleButtonCursor == FAILURE) {
- X Error("StoreCursors -> Unable to store MiddleButtonCursor.");
- X }
- X
- X /*
- X * Right button main cursor.
- X */
- X RightButtonCursor = XCreateFontCursor(dpy, XC_rightbutton);
- X if (RightButtonCursor == FAILURE) {
- X Error("StoreCursors -> Unable to store RightButtonCursor.");
- X }
- X
- X /*
- X * Targer cursor used to identify a window for an action.
- X */
- X TargetCursor = XCreateFontCursor(dpy, XC_circle);
- X if (TargetCursor == FAILURE) {
- X Error("StoreCursors -> Unable to store TargetCursor.");
- X }
- X /*
- X * Gumby cursor used in icons if icon is not a typein icon
- X * (otherwise use textcursor
- X */
- X GumbyCursor = XCreateFontCursor(dpy, XC_gumby);
- X if (GumbyCursor == FAILURE) {
- X Error("StoreCursors -> Unable to store GumbyCursor.");
- X }
- X Leave(0)
- X}
- X
- END_OF_FILE
- if test 4232 -ne `wc -c <'Cursors.c'`; then
- echo shar: \"'Cursors.c'\" unpacked with wrong size!
- fi
- # end of 'Cursors.c'
- fi
- if test -f 'Icons.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Icons.c'\"
- else
- echo shar: Extracting \"'Icons.c'\" \(14575 characters\)
- sed "s/^X//" >'Icons.c' <<'END_OF_FILE'
- X
- X
- X
- X#ifndef lint
- Xstatic char *rcsid_Icons_c = "$Header: /usr/graph2/X11.3/contrib/windowmgrs/awm/RCS/Icons.c,v 1.2 89/02/07 20:05:21 jkh Exp $";
- X#endif lint
- X
- X#include "X11/copyright.h"
- X/*
- X *
- X * Copyright 1987, 1988 by Ardent Computer Corporation, Sunnyvale, Ca.
- X *
- X * Copyright 1987 by Jordan Hubbard.
- X *
- X *
- X * All Rights Reserved
- X *
- X * Permission to use, copy, modify, and distribute this software and its
- X * documentation for any purpose and without fee is hereby granted,
- X * provided that the above copyright notice appear in all copies and that
- X * both that copyright notice and this permission notice appear in
- X * supporting documentation, and that the name of Ardent Computer
- X * Corporation or Jordan Hubbard not be used in advertising or publicity
- X * pertaining to distribution of the software without specific, written
- X * prior permission.
- X *
- X */
- X
- X/*
- X * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- X *
- X * All Rights Reserved
- X *
- X * Permission to use, copy, modify, and distribute this software and its
- X * documentation for any purpose and without fee is hereby granted,
- X * provided that the above copyright notice appear in all copies and that
- X * both that copyright notice and this permission notice appear in
- X * supporting documentation, and that the name of Digital Equipment
- X * Corporation not be used in advertising or publicity pertaining to
- X * distribution of the software without specific, written prior permission.
- X *
- X *
- X * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- X * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- X * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- X * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- X * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- X * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- X * SOFTWARE.
- X */
- X
- X
- X
- X/*
- X * MODIFICATION HISTORY
- X *
- X * 000 -- L. Guarino Reid, DEC Ultrix Engineering Group
- X * 001 -- Jordan Hubbard, Ardent Computer
- X * Many modifications for titled windows.
- X * 1.2 -- Jordan Hubbard, Ardent Computer.
- X * vPad and hPad usage corrected (Chris Thewalt fix).
- X * Clipping now set on right GC.
- X * 1.3 -- Changed the way icon button events are handled.
- X * 1.4 -- Isaac J. Salzman, RAND Corp.
- X * reworked the way icons are handled - if IconsLabels is set, icons
- X * with pixmaps are labled at bottom & icons w/o pixmaps use a default
- X * pixmap w/a label instead of just a solid bg tile (i.e. twm style),
- X * otherwise old uwm style icons are used (typin and all).
- X * 1.5 -- Modified Isaac's changes to allow wm_option.icon.labels to
- X * work. This allows individual clients/classes to determine their
- X * icon style. -jkh
- X */
- X
- X#include "awm.h"
- X#include "X11/Xutil.h"
- X
- Xextern XContext AwmContext;
- X extern void Warning();
- X
- X/* the client should pass us a bitmap (single-plane pixmap with background=0
- X * and foreground = 1). It is our responsibility to convert it to a pixmap
- X * of the appropriate depth for a window tile and also color it with the
- X * appropriate background and foreground pixels.
- X *
- X * we'll use the (global) IconGC for the fore/background pixels.
- X */
- X
- Xstatic Pixmap MakePixmapFromBitmap( bitmap, clipmask, width_return, height_return )
- XPixmap bitmap, clipmask;
- Xunsigned int *width_return, *height_return;
- X{
- X Pixmap tile;
- X Window junkW;
- X int junk;
- X unsigned int width, height;
- X GC iGC;
- X XGCValues gcv;
- X
- X Entry("MakePixmapFromBitmap")
- X
- X if (!XGetGeometry( dpy, bitmap, &junkW, &junk, &junk,
- X &width, &height, &junk, &junk )) {
- X Warning( "client passed invalid pixmap for icon." );
- X Leave( NULL )
- X }
- X tile = XCreatePixmap( dpy, RootWindow(dpy, scr), width, height,
- X (unsigned) DefaultDepth(dpy, scr) );
- X gcv.foreground = ITextForeground;
- X gcv.background = ITextBackground;
- X iGC = XCreateGC(dpy, RootWindow(dpy, scr), (GCForeground | GCBackground),
- X &gcv);
- X if (clipmask)
- X XSetClipMask(dpy, iGC, clipmask);
- X XCopyPlane(dpy, bitmap, tile, iGC, 0, 0, width, height, 0, 0,
- X (unsigned long) 1 );
- X XFreeGC(dpy, iGC);
- X if (width_return)
- X *width_return = width;
- X if (height_return)
- X *height_return = height;
- X Leave(tile)
- X}
- X
- Xchar *GetIconName(window)
- XWindow window;
- X{
- X unsigned char *name;
- X Status status;
- X unsigned long len, after;
- X Atom a_type;
- X int a_form;
- X
- X Entry("GetIconName")
- X
- X status = XGetWindowProperty(dpy, window, XA_WM_ICON_NAME, 0L, 256L,
- X False, XA_STRING, &a_type, &a_form, &len, &after,
- X &name);
- X
- X if (status != Success) {
- X status = XGetWindowProperty(dpy, window, XA_WM_NAME, 0L, NAME_LEN,
- X False, XA_STRING, &a_type, &a_form, &len,
- X &after, &name);
- X if (status != Success)
- X Leave( DEF_NAME ) /* use default name */
- X }
- X if (a_form == 0) /* we have no bananas */
- X Leave((char *)NULL)
- X if (a_form != 8) {
- X Warning("Window has icon_name in wrong format");
- X if (name)
- X free(name);
- X Leave((char *)NULL)
- X }
- X if (len > NAME_LEN) {
- X Warning("Window has icon_name greater than maximum length");
- X len = NAME_LEN;
- X }
- X if (!len)
- X Leave((char *)NULL)
- X name[len] = 0;
- X Leave((char *) name)
- X}
- X
- XBoolean IsIcon(icon, win)
- XWindow icon;
- XWindow *win;
- X{
- X AwmInfoPtr awi;
- X
- X Entry("IsIcon")
- X
- X if (win)
- X *win = 0;
- X awi = GetAwmInfo(icon);
- X if (!awi)
- X Leave(FALSE)
- X if (awi->icon == icon) {
- X if (win)
- X *win = awi->client;
- X Leave(TRUE)
- X }
- X else if (awi->client == icon || awi->frame == icon) {
- X if (win)
- X *win = awi->icon;
- X Leave(FALSE)
- X }
- X Leave(FALSE)
- X}
- X
- XRemoveIcon(window)
- XWindow window;
- X{
- X AwmInfoPtr awi;
- X
- X Entry("RemoveIcon")
- X
- X if ((awi = GetAwmInfo(window)) != NULL) {
- X XDeleteContext(dpy, awi->icon, AwmContext);
- X if (awi->own) {
- X XDestroyWindow(dpy, awi->icon);
- X if ((awi->iconPixmap != IBackPixmap) &&
- X (awi->iconPixmap != IDefPixmap))
- X XFreePixmap(dpy, awi->iconPixmap);
- X }
- X awi->icon = (Drawable)NULL;
- X awi->state ^= ST_ICON;
- X awi->state |= ST_WINDOW;
- X#ifdef WMSTATE
- X awi->wm_state.icon=0;
- X awi->wm_state.state=NormalState;
- X XChangeProperty(dpy,awi->client,wm_state_atom,wm_state_atom,32,
- X PropModeReplace,(char *) &awi->wm_state,2);
- X#endif /* WMSTATE */
- X }
- X Leave_void
- X}
- X
- XGetDefaultSize(window, icon_w, icon_h)
- XWindow window;
- Xint *icon_w, *icon_h;
- X{
- X char *name; /* Event window name. */
- X
- X Entry("GetDefaultSize")
- X
- X /*
- X * Determine the size of the icon window.
- X */
- X name = GetIconName(window);
- X *icon_h = IFontInfo->ascent + IFontInfo->descent;
- X if (name) {
- X *icon_w = XTextWidth(IFontInfo, name, strlen(name));
- X if (*icon_w == 0)
- X *icon_w = *icon_h;
- X }
- X else
- X *icon_w = *icon_h = 0; /* set to zilch if bogus name! */
- X Leave_void
- X}
- X
- XWindow MakeIcon(window, x, y, mousePositioned)
- XWindow window; /* associated window. */
- Xint x, y; /* Event mouse position. */
- XBoolean mousePositioned;
- X{
- X int icon_x, icon_y; /* Icon U. L. X and Y coordinates. */
- X unsigned int icon_w, icon_h; /* Icon width and height. */
- X unsigned int icon_bdr; /* Icon border width. */
- X long mask; /* Icon event mask */
- X XSetWindowAttributes iconValues; /* for icon window creation */
- X unsigned long iconValues_mask; /* for above */
- X XWMHints *wmhints; /* see if icon position provided */
- X XWMHints *XGetWMHints();
- X Pixmap clip = 0;
- X Window AddIcon();
- X AwmInfoPtr awi;
- X int junk;
- X
- X Entry("MakeIcon")
- X
- X awi = GetAwmInfo(window);
- X
- X if (awi->attrs & AT_ICONLABEL) { /* check for iconLables - twm style */
- X iconValues.background_pixmap = IDefPixmap;
- X mask = StructureNotifyMask;
- X }
- X else { /* uwm style */
- X iconValues.background_pixmap = IBackPixmap;
- X mask = (ExposureMask | StructureNotifyMask | KeyPressMask);
- X }
- X
- X /*
- X * Process window manager hints.
- X */
- X if (wmhints = XGetWMHints(dpy, window)) {
- X if (wmhints->flags & IconWindowHint)
- X Leave(AddIcon(window, wmhints->icon_window, FALSE,
- X (StructureNotifyMask), (Pixmap)NULL));
- X
- X if (wmhints->flags & IconPixmapHint) {
- X if (wmhints->flags & IconMaskHint)
- X clip = wmhints->icon_mask;
- X iconValues.background_pixmap =
- X MakePixmapFromBitmap(wmhints->icon_pixmap, clip,
- X &icon_w, &icon_h );
- X if (iconValues.background_pixmap)
- X mask = (StructureNotifyMask);
- X else {
- X iconValues.background_pixmap = IBackPixmap;
- X wmhints->flags &= ~IconPixmapHint;
- X }
- X }
- X }
- X
- X /*
- X * we now have a pixmap of some sort - either a background
- X * tile or an actual image - get the dimensions...
- X */
- X
- X if (!XGetGeometry(dpy, iconValues.background_pixmap,
- X &junk, &junk, &junk,
- X &icon_w, &icon_h, &junk, &junk )) {
- X Warning( "can't get geom of pixmap in MakeIcon" );
- X Leave( NULL );
- X }
- X
- X if (awi->attrs & AT_ICONLABEL) {
- X char *s;
- X Pixmap p;
- X unsigned int nw, nh;
- X int tw, th, hoff, voff;
- X
- X if (s = GetIconName(window)) {
- X nw = icon_w;
- X nh = icon_h;
- X
- X /* find out dimensions of text, add padding */
- X tw = XTextWidth(IFontInfo, s, strlen(s)) + HIconPad;
- X th = IFontInfo->ascent + IFontInfo->descent + VIconPad;
- X
- X
- X /* calculate the size including the icon label */
- X if (nw < tw) /* width >= text width */
- X nw = tw;
- X
- X /* always tack on extra for the label height */
- X nh += th;
- X
- X /* now that we have dimensions, create the pixmap
- X we want to eventually use as the icon window
- X */
- X
- X if (!(p = XCreatePixmap(dpy, RootWindow(dpy, scr), nw, nh,
- X (unsigned) DefaultDepth(dpy, scr)))) {
- X Warning("can't create pixmap in MakeIcon.");
- X Leave( NULL )
- X }
- X
- X /* calculate horizontal offset of pixmap (center it!) */
- X if (hoff = (nw - icon_w))
- X hoff = (hoff+1)/2;
- X
- X /* if the label goes at the top, push the thing to the bottom
- X * otherwise leave it at the top
- X */
- X
- X voff = ILabelTop ? (th - (VIconPad+1)/2) : (VIconPad+1)/2;
- X
- X XCopyArea(dpy, iconValues.background_pixmap, p,
- X IconGC, 0, 0, icon_w, icon_h,
- X hoff, voff);
- X
- X /* now that we have a centered pixmap draw
- X * some text on it....
- X */
- X
- X if (hoff = (nw - tw))
- X hoff = (hoff+1)/2;
- X else
- X hoff = (HIconPad ? (HIconPad+1)/2 : 1);
- X
- X /* see if string goes to top or bottom */
- X if (ILabelTop)
- X voff = th - (IFontInfo->descent-((VIconPad+1)/2));
- X else
- X voff = nh-(IFontInfo->descent+((VIconPad+1)/2));
- X
- X XDrawImageString(dpy, p, IconGC, hoff, voff, s, strlen(s));
- X
- X /*
- X * Now free up original pixmap and replace
- X * with this new one.
- X */
- X
- X icon_h = nh;
- X icon_w = nw;
- X
- X if ((iconValues.background_pixmap != IBackPixmap) &&
- X (iconValues.background_pixmap != IDefPixmap))
- X XFreePixmap(dpy, iconValues.background_pixmap);
- X iconValues.background_pixmap = p;
- X }
- X }
- X else { /* do it the old way.... */
- X int h, w;
- X
- X if (!wmhints || !(wmhints->flags & IconPixmapHint)) {
- X GetDefaultSize(window, &w, &h);
- X
- X if ((w==0) || (h==0)) { /* no label, use IDefPixmap */
- X iconValues.background_pixmap = IDefPixmap;
- X
- X /* get geom of ipixmap */
- X if (!XGetGeometry(dpy, iconValues.background_pixmap,
- X &junk, &junk, &junk,
- X &icon_w, &icon_h, &junk, &junk)) {
- X Warning("can't get geom of pixmap in MakeIcon");
- X Leave(NULL)
- X }
- X }
- X else { /* use small label icon + some padding */
- X icon_h = h+VIconPad;
- X icon_w = w+HIconPad;
- X }
- X }
- X }
- X /*
- X * Set the icon border attributes.
- X */
- X if (!wmhints || !(wmhints->flags & IconWindowHint)) {
- X icon_bdr = IBorderWidth;
- X iconValues.border_pixel = IBorder;
- X }
- X /*
- X * Determine icon position....
- X */
- X if (wmhints && (wmhints->flags & IconPositionHint)) {
- X icon_x = wmhints->icon_x;
- X icon_y = wmhints->icon_y;
- X } else {
- X if (mousePositioned) {
- X /*
- X * Determine the coordinates of the icon window;
- X * normalize so that we don't lose the icon off the
- X * edge of the screen.
- X */
- X icon_x = x - (icon_w >> 1) + 1;
- X if (icon_x < 0) icon_x = 0;
- X icon_y = y - (icon_h >> 1) + 1;
- X if (icon_y < 0) icon_y = 0;
- X if ((icon_x - 1 + icon_w + (icon_bdr << 1)) > ScreenWidth) {
- X icon_x = ScreenWidth - icon_w - (icon_bdr << 1) + 1;
- X }
- X if ((icon_y - 1 + icon_h + (icon_bdr << 1)) > ScreenHeight) {
- X icon_y = ScreenHeight - icon_h - (icon_bdr << 1) + 1;
- X }
- X }
- X else {
- X icon_x = x + (icon_w >> 1);
- X icon_y = y + (icon_y >> 1);
- X }
- X
- X }
- X
- X /*
- X * Create the icon window.
- X */
- X iconValues_mask = CWBorderPixel | CWBackPixmap;
- X /*
- X * Here we assume that if they want save unders, they'll also want
- X * backing store on the icons. Perhaps a dangerous assumption, but
- X * one we have to make at this point.
- X */
- X if (SaveUnder) {
- X iconValues.backing_store = WhenMapped;
- X iconValues_mask |= CWBackingStore;
- X }
- X Leave(AddIcon(window,
- X XCreateWindow(
- X dpy, RootWindow(dpy, scr),
- X icon_x, icon_y,
- X icon_w, icon_h,
- X icon_bdr, 0, CopyFromParent, CopyFromParent,
- X iconValues_mask, &iconValues),
- X TRUE, mask, iconValues.background_pixmap))
- X}
- X
- XWindow AddIcon(window, icon, own, mask, background)
- XWindow window, icon;
- XBoolean own;
- Xlong mask;
- XPixmap background;
- X{
- X AwmInfoPtr awi;
- X
- X Entry("AddIcon")
- X
- X if (icon == NULL)
- X Leave(NULL)
- X /*
- X * Use the text cursor whenever the mouse is in the icon window, if
- X * it's a typein icon, otherwise use gumby....
- X */
- X
- X if (background == IBackPixmap)
- X XDefineCursor(dpy, icon, TextCursor);
- X else
- X XDefineCursor(dpy, icon, GumbyCursor);
- X
- X /*
- X * Select "key pressed", "window exposure" and "unmap window"
- X * events for the icon window.
- X */
- X XSelectInput(dpy, icon, mask | ButtonPressMask | ButtonReleaseMask);
- X
- X awi = GetAwmInfo(window);
- X awi->icon = icon;
- X awi->own = own;
- X awi->iconPixmap = background;
- X#ifdef WMSTATE
- X awi->wm_state.icon=icon;
- X XChangeProperty(dpy,awi->client,wm_state_atom,wm_state_atom,32,
- X PropModeReplace,(char *) &awi->wm_state,2);
- X#endif /* WMSTATE */
- X XSaveContext(dpy, icon, AwmContext, (caddr_t) awi);
- X Leave(icon)
- X}
- END_OF_FILE
- if test 14575 -ne `wc -c <'Icons.c'`; then
- echo shar: \"'Icons.c'\" unpacked with wrong size!
- fi
- # end of 'Icons.c'
- fi
- if test -f 'Makefile.rtl' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Makefile.rtl'\"
- else
- echo shar: Extracting \"'Makefile.rtl'\" \(10660 characters\)
- sed "s/^X//" >'Makefile.rtl' <<'END_OF_FILE'
- X# makefile generated by mkold
- X
- XXDIR = /usr/src/X.V11R2
- X
- XCOM.00 = $(XDIR)/lib
- XDIR.00 = $(COM.00)/oldX
- XDIR.01 = $(COM.00)/X
- X
- XNEATENOBJS = \
- X check_can_mod.o check_grow.o check_shrink.o \
- X commit_op.o goal.o gravity.o mem.o state.o \
- X tilwin_close.o tilwin_create.o tilwin_desk.o \
- X tilwin_dump.o tilwin_init.o tilwin_list.o tilwin_misc.o \
- X tilwin_open.o tilwin_resat.o tilwin_resize.o \
- X tilwin_set.o tilwin_tmp.o tilwin_undo.o trial_grow.o \
- X trial_place.o trial_satisfy.o trial_slide.o \
- X tilwin_slide.o trial_edge_sweep.o win.o tilwin_thread.o \
- X init_tws.o pieces_enum.o pieces_merge.o pieces_split.o \
- X pieces_update.o tile_create.o tile_delete.o \
- X tile_enlarge.o tile_find.o tile_nbrs.o tile_panic.o \
- X tile_shrink.o tileopts.o userglobals.o neaten.o
- X
- Xneaten.a: $(NEATENOBJS)
- X ar qcv neaten.a $(NEATENOBJS)
- X ranlib neaten.a
- X
- Xcheck_can_mod.o : check_can_mod.c tilwin.extern.h state.extern.h \
- X state.h tilwin.intern.h tilwin.h tilwinopts.h basetype.h \
- X std_defs.h tilwin.define.h tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c check_can_mod.c
- X
- Xcheck_grow.o : check_grow.c win.extern.h tile.extern.h tile.h \
- X basetype.h std_defs.h state.extern.h state.h \
- X tilwin.intern.h tilwin.h tilwinopts.h tilwin.extern.h \
- X tilwin.define.h tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c check_grow.c
- X
- Xcheck_shrink.o : check_shrink.c goal.extern.h tilwin.extern.h \
- X state.extern.h state.h tilwin.intern.h tilwin.h \
- X tilwinopts.h basetype.h std_defs.h tilwin.define.h \
- X tileopts.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c check_shrink.c
- X
- Xcommit_op.o : commit_op.c win.extern.h tile.extern.h tile.h basetype.h \
- X std_defs.h state.extern.h state.h tilwin.intern.h \
- X tilwin.h tilwinopts.h tilwin.define.h tileopts.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c commit_op.c
- X
- Xgoal.o : goal.c tilwin.define.h tileopts.h tilwin.intern.h tilwin.h \
- X tilwinopts.h basetype.h std_defs.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c goal.c
- X
- Xgravity.o : gravity.c tilwin.extern.h state.extern.h state.h \
- X tilwin.intern.h tilwin.h tilwinopts.h basetype.h \
- X std_defs.h tilwin.define.h tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c gravity.c
- X
- Xmem.o : mem.c tile.h basetype.h std_defs.h tilwin.intern.h tilwin.h \
- X tilwinopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c mem.c
- X
- Xstate.o : state.c tilwin.intern.h tilwin.h tilwinopts.h basetype.h \
- X std_defs.h state.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c state.c
- X
- Xtilwin_close.o : tilwin_close.c state.extern.h state.h tilwin.intern.h \
- X tilwin.h tilwinopts.h basetype.h std_defs.h win.extern.h \
- X tilwin.define.h tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tilwin_close.c
- X
- Xtilwin_create.o : tilwin_create.c mem.extern.h state.extern.h state.h \
- X tilwin.intern.h tilwin.h tilwinopts.h basetype.h \
- X std_defs.h tilwin.define.h tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tilwin_create.c
- X
- Xtilwin_desk.o : tilwin_desk.c gravity.extern.h basetype.h std_defs.h \
- X tile.extern.h tile.h tilwin.extern.h state.extern.h \
- X state.h tilwin.intern.h tilwin.h tilwinopts.h \
- X copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tilwin_desk.c
- X
- Xtilwin_dump.o : tilwin_dump.c win.extern.h tilwin.extern.h \
- X state.extern.h state.h tilwin.intern.h tilwin.h \
- X tilwinopts.h basetype.h std_defs.h tilwin.define.h \
- X tileopts.h tile.extern.h tile.h tile.define.h \
- X tile.intern.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tilwin_dump.c
- X
- Xtilwin_init.o : tilwin_init.c tile.intern.h tile.h basetype.h \
- X std_defs.h tilwin.intern.h tilwin.h tilwinopts.h \
- X copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tilwin_init.c
- X
- Xtilwin_list.o : tilwin_list.c state.extern.h state.h tilwin.intern.h \
- X tilwin.h tilwinopts.h basetype.h std_defs.h \
- X tilwin.define.h tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tilwin_list.c
- X
- Xtilwin_misc.o : tilwin_misc.c win.extern.h tile.extern.h tile.h \
- X basetype.h std_defs.h tile.define.h tile.intern.h \
- X state.extern.h state.h tilwin.intern.h tilwin.h \
- X tilwinopts.h tilwin.define.h tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tilwin_misc.c
- X
- Xtilwin_open.o : tilwin_open.c win.extern.h gravity.extern.h basetype.h \
- X std_defs.h commit.extern.h trial.extern.h trial.h \
- X state.extern.h state.h tilwin.intern.h tilwin.h \
- X tilwinopts.h tilwin.define.h tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tilwin_open.c
- X
- Xtilwin_resat.o : tilwin_resat.c win.extern.h commit.extern.h \
- X trial.extern.h trial.h state.extern.h state.h \
- X tilwin.intern.h tilwin.h tilwinopts.h basetype.h \
- X std_defs.h tilwin.define.h tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tilwin_resat.c
- X
- Xtilwin_resize.o : tilwin_resize.c gravity.extern.h basetype.h \
- X std_defs.h win.extern.h commit.extern.h trial.extern.h \
- X trial.h state.extern.h state.h tilwin.intern.h tilwin.h \
- X tilwinopts.h tilwin.define.h tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tilwin_resize.c
- X
- Xtilwin_set.o : tilwin_set.c trial.extern.h trial.h state.extern.h \
- X state.h tilwin.intern.h tilwin.h tilwinopts.h basetype.h \
- X std_defs.h tilwin.define.h tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tilwin_set.c
- X
- Xtilwin_tmp.o : tilwin_tmp.c trial.h state.extern.h state.h \
- X tilwin.intern.h tilwin.h tilwinopts.h basetype.h \
- X std_defs.h trial.extern.h tilwin.define.h tileopts.h \
- X copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tilwin_tmp.c
- X
- Xtilwin_undo.o : tilwin_undo.c win.extern.h state.extern.h state.h \
- X tilwin.intern.h tilwin.h tilwinopts.h basetype.h \
- X std_defs.h tilwin.define.h tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tilwin_undo.c
- X
- Xtrial_grow.o : trial_grow.c check.extern.h gravity.extern.h basetype.h \
- X std_defs.h tilwin.extern.h state.extern.h state.h \
- X tilwin.intern.h tilwin.h tilwinopts.h tilwin.define.h \
- X tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c trial_grow.c
- X
- Xtrial_place.o : trial_place.c check.extern.h gravity.extern.h \
- X basetype.h std_defs.h tilwin.extern.h state.extern.h \
- X state.h tilwin.intern.h tilwin.h tilwinopts.h \
- X tilwin.define.h tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c trial_place.c
- X
- Xtrial_satisfy.o : trial_satisfy.c check.extern.h gravity.extern.h \
- X basetype.h std_defs.h tilwin.extern.h state.extern.h \
- X state.h tilwin.intern.h tilwin.h tilwinopts.h \
- X tilwin.define.h tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c trial_satisfy.c
- X
- Xtrial_slide.o : trial_slide.c trial.extern.h trial.h tilwin.extern.h \
- X state.extern.h state.h tilwin.intern.h tilwin.h \
- X tilwinopts.h basetype.h std_defs.h tilwin.define.h \
- X tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c trial_slide.c
- X
- Xtilwin_slide.o : tilwin_slide.c trial.extern.h trial.h tilwin.extern.h \
- X state.extern.h state.h tilwin.intern.h tilwin.h \
- X tilwinopts.h basetype.h std_defs.h tilwin.define.h \
- X tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tilwin_slide.c
- X
- Xtrial_edge_sweep.o : trial_edge_sweep.c tilwin.extern.h state.extern.h \
- X state.h tilwin.intern.h tilwin.h tilwinopts.h basetype.h \
- X std_defs.h tile.extern.h tile.h tile.define.h \
- X tile.intern.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c trial_edge_sweep.c
- X
- Xwin.o : win.c gravity.extern.h basetype.h std_defs.h state.extern.h \
- X state.h tilwin.intern.h tilwin.h tilwinopts.h \
- X tile.define.h tile.intern.h tile.h tile.extern.h \
- X tilwin.define.h tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c win.c
- X
- Xtilwin_thread.o : tilwin_thread.c state.extern.h state.h \
- X tilwin.intern.h tilwin.h tilwinopts.h basetype.h \
- X std_defs.h tilwin.define.h tileopts.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tilwin_thread.c
- X
- Xinit_tws.o : init_tws.c tile-list.h tile.define.h tile.intern.h tile.h \
- X basetype.h std_defs.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c init_tws.c
- X
- Xpieces_enum.o : pieces_enum.c tile.extern.h tile.h basetype.h \
- X std_defs.h tile-list.h tile.define.h tile.intern.h \
- X copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c pieces_enum.c
- X
- Xpieces_merge.o : pieces_merge.c tile-list.h tile.define.h tile.intern.h \
- X tile.h basetype.h std_defs.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c pieces_merge.c
- X
- Xpieces_split.o : pieces_split.c tile.extern.h tile.h basetype.h \
- X std_defs.h tile-list.h tile.define.h tile.intern.h \
- X copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c pieces_split.c
- X
- Xpieces_update.o : pieces_update.c tile-list.h tile.define.h \
- X tile.intern.h tile.h basetype.h std_defs.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c pieces_update.c
- X
- Xtile_create.o : tile_create.c tile.extern.h tile.h basetype.h \
- X std_defs.h tile.define.h tile.intern.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tile_create.c
- X
- Xtile_delete.o : tile_delete.c tile.extern.h tile.h basetype.h \
- X std_defs.h tile-list.h tile.define.h tile.intern.h \
- X copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tile_delete.c
- X
- Xtile_enlarge.o : tile_enlarge.c tile.extern.h tile.h basetype.h \
- X std_defs.h tile.define.h tile.intern.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tile_enlarge.c
- X
- Xtile_find.o : tile_find.c tilwin.extern.h state.extern.h state.h \
- X tilwin.intern.h tilwin.h tilwinopts.h basetype.h \
- X std_defs.h tile.define.h tile.intern.h tile.h \
- X copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tile_find.c
- X
- Xtile_nbrs.o : tile_nbrs.c tile-list.h tile.extern.h tile.h basetype.h \
- X std_defs.h tile.define.h tile.intern.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tile_nbrs.c
- X
- Xtile_panic.o : tile_panic.c copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tile_panic.c
- X
- Xtile_shrink.o : tile_shrink.c tile.define.h tile.intern.h tile.h \
- X basetype.h std_defs.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tile_shrink.c
- X
- Xtileopts.o : tileopts.c tileopts.h basetype.h std_defs.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c tileopts.c
- X
- Xuserglobals.o : userglobals.c explicitopts.h uservals.h useropts.h \
- X basetype.h std_defs.h copyright.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c userglobals.c
- X
- Xneaten.o : neaten.c neaten.define.h tilwin.define.h tileopts.h \
- X tilwin.intern.h tilwin.h tilwinopts.h basetype.h \
- X std_defs.h userwin.define.h tilwin.extern.h \
- X state.extern.h state.h userglobals.define.h userwin.h \
- X explicitwinopts.h userwinopts.h
- X $(CC) $(CFLAGS) -g -DNEATEN -DWM_DEBUG -c neaten.c
- END_OF_FILE
- if test 10660 -ne `wc -c <'Makefile.rtl'`; then
- echo shar: \"'Makefile.rtl'\" unpacked with wrong size!
- fi
- # end of 'Makefile.rtl'
- fi
- if test -f 'RubberBand.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'RubberBand.c'\"
- else
- echo shar: Extracting \"'RubberBand.c'\" \(12196 characters\)
- sed "s/^X//" >'RubberBand.c' <<'END_OF_FILE'
- X
- X
- X
- X#ifndef lint
- Xstatic char *rcsid_RubberBand_c = "$Header: /usr/graph2/X11.3/contrib/windowmgrs/awm/RCS/RubberBand.c,v 1.2 89/02/07 21:23:46 jkh Exp $";
- X#endif lint
- X
- X#include "X11/copyright.h"
- X/*
- X *
- X * Copyright 1987, 1988 by Ardent Computer Corporation, Sunnyvale, Ca.
- X *
- X * Copyright 1987 by Jordan Hubbard.
- X *
- X *
- X * All Rights Reserved
- X *
- X * Permission to use, copy, modify, and distribute this software and its
- X * documentation for any purpose and without fee is hereby granted,
- X * provided that the above copyright notice appear in all copies and that
- X * both that copyright notice and this permission notice appear in
- X * supporting documentation, and that the name of Ardent Computer
- X * Corporation or Jordan Hubbard not be used in advertising or publicity
- X * pertaining to distribution of the software without specific, written
- X * prior permission.
- X *
- X */
- X
- X/*
- X * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- X *
- X * All Rights Reserved
- X *
- X * Permission to use, copy, modify, and distribute this software and its
- X * documentation for any purpose and without fee is hereby granted,
- X * provided that the above copyright notice appear in all copies and that
- X * both that copyright notice and this permission notice appear in
- X * supporting documentation, and that the name of Digital Equipment
- X * Corporation not be used in advertising or publicity pertaining to
- X * distribution of the software without specific, written prior permission.
- X *
- X *
- X * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- X * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- X * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- X * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- X * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- X * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- X * SOFTWARE.
- X */
- X
- X/*
- X * MODIFICATION HISTORY
- X *
- X * 000 -- Loretta Guarino Reid, DEC Ultrix Engineering Group
- X * 001 -- Ralph R. Swick, DEC/MIT Project Athena
- X * tailor to uwm; use global resources created by uwm
- X */
- X
- X#include "awm.h"
- X#include "X11/Xutil.h"
- X#include "X11/cursorfont.h"
- X
- X#define max(a,b) ( (a) > (b) ? (a) : (b) )
- X#define min(a,b) ( (a) > (b) ? (b) : (a) )
- X#define abs(a) ( (a) > 0 ? (a) : -(a))
- X#define makemult(a, b) ((b==1) ? (a) : (((int)((a) / (b))) * (b)) )
- X
- X#define DCOUNT 2
- X#define PCOUNT 1 + (4 * 2 * DCOUNT)
- X
- X#define BW PBorderWidth /* pop-up window border width */
- X#define IBW PPadding /* internal border width for pop-up */
- X
- XAskUser(dpy, scr, window, x, y, width, height, hints, transient)
- XDisplay *dpy;
- Xint scr;
- XWindow window;
- Xint *x, *y;
- Xunsigned int *width, *height;
- XXSizeHints *hints;
- XWindow transient;
- X{
- X Cursor ur, ul, ll, lr; /* cursors for rubber banding */
- X int change_cursor = FALSE;
- X int current_cursor;
- X char *text; /* text for prompt string */
- X int nz; /* count where zeros are */
- X unsigned int popw, poph; /* width and height of prompt window*/
- X#define invertGC DrawGC
- X int x1, y1; /* location of mouse */
- X int x2, y2; /* other corner of box */
- X int rootx, rooty;
- X unsigned int mask; /* for XQueryPointer */
- X Window root, subw; /* for XQueryPointer */
- X int xa = -1, ya = -1, xb = -1, yb = -1;
- X int xinc, yinc;
- X unsigned int minwidth, minheight;
- X unsigned int maxwidth, maxheight;
- X unsigned int defwidth, defheight;
- X int chosen = -1;
- X int stop = FALSE;
- X int changed = TRUE;
- X int doit = FALSE;
- X int dx, dy;
- X int delta;
- X int ijunk;
- X XPoint box[PCOUNT];
- X int hsize, vsize;
- X int zero = '0'; /* zero offset for char conversion */
- X XEvent e; /* someplace to put the event */
- X unsigned int events; /* what events we want. */
- X Window pop, wjunk; /* pop up prompt window */
- X int i;
- X char *name;
- X int width_offset, height_offset; /* to subtract if resize increments */
- X
- X Entry("AskUser")
- X
- X if (transient) {
- X XGetGeometry( dpy, window, &wjunk, x, y, width, height,
- X &ijunk, &ijunk);
- X Leave_void
- X }
- X if ((hints->flags & USPosition) && (hints->flags & USSize)) {
- X *x = hints->x;
- X *y = hints->y;
- X *width = hints->width;
- X *height = hints->height;
- X Leave_void
- X }
- X if (!XFetchName(dpy, window, &name))
- X name = "Unnamed Window";
- X
- X ur = XCreateFontCursor(dpy, XC_ur_angle);
- X ul = XCreateFontCursor(dpy, XC_ul_angle);
- X ll = XCreateFontCursor(dpy, XC_ll_angle);
- X lr = XCreateFontCursor(dpy, XC_lr_angle);
- X current_cursor = ul;
- X
- X events = ButtonPressMask | ButtonReleaseMask;
- X
- X /*
- X * go get the mouse as soon as you can
- X */
- X
- X while (1) {
- X if (XGrabPointer (dpy, RootWindow(dpy, scr), FALSE, events,
- X GrabModeAsync, GrabModeAsync, None, ul,
- X CurrentTime) == GrabSuccess)
- X break;
- X sleep (1);
- X }
- X nz = strlen(name); /* compute number of characters */
- X text = (char *)malloc( nz + 11 );
- X (void) strcpy(text, name);
- X (void) strcat(text, ": 000x000");
- X nz += 9;
- X popw = XTextWidth (PFontInfo, text, nz) + 2 * IBW;
- X poph = PFontInfo->ascent+PFontInfo->descent + 2 * IBW;
- X
- X pop = XCreateSimpleWindow(dpy, RootWindow(dpy, scr),
- X 0, 0, popw, poph, BW, PBorder, PBackground);
- X XMapWindow (dpy, pop);
- X
- X if (hints->flags & PMinSize) {
- X minwidth = hints->min_width;
- X minheight = hints->min_height;
- X } else {
- X minwidth = 0;
- X minheight = 0;
- X }
- X if (hints->flags & PMaxSize) {
- X maxwidth = max(hints->max_width, minwidth);
- X maxheight = max(hints->max_height, minheight);
- X } else {
- X maxwidth = DisplayWidth(dpy, scr);
- X maxheight = DisplayHeight(dpy, scr);
- X }
- X if (hints->flags & PResizeInc) {
- X xinc = hints->width_inc;
- X yinc = hints->height_inc;
- X } else {
- X xinc = 1;
- X yinc = 1;
- X }
- X if (hints->flags & PSize || hints->flags & USSize) {
- X defwidth = hints->width;
- X defheight = hints->height;
- X } else if (hints->flags&PMinSize) {
- X defwidth = hints->min_width;
- X defheight = hints->min_height;
- X } else if (hints->flags&PMaxSize) {
- X defwidth = hints->max_width;
- X defheight = hints->max_height;
- X } else {
- X long dummy;
- X XGetGeometry(dpy, window, &dummy, &dummy, &dummy,
- X &defwidth, &defheight, &dummy, &dummy);
- X }
- X
- X /* until there are better WM_HINTS, we'll assume that the client's
- X * minimum width and height are the appropriate offsets to subtract
- X * when resizing with an explicit resize increment.
- X */
- X if (hints->flags & PMinSize && hints->flags & PResizeInc) {
- X width_offset = hints->min_width;
- X height_offset = hints->min_height;
- X } else
- X width_offset = height_offset = 0;
- X
- X
- X XQueryPointer (dpy, RootWindow(dpy, scr), &root, &subw,
- X &rootx, &rooty, &x1, &y1, &mask);
- X hsize = minwidth;
- X vsize = minheight;
- X x2 = x1+hsize;
- X y2 = y1+vsize;
- X
- X while (stop == FALSE) {
- X if ( (xb != max (x1, x2)) || (yb != max (y1, y2))
- X ||(xa != min (x1, x2)) || (ya != min (y1, y2)) ) {
- X xa = min (x1, x2);
- X ya = min (y1, y2);
- X xb = max (x1, x2);
- X yb = max (y1, y2);
- X for ( i = 0; i < PCOUNT; i += 4) {
- X box[i].x = xa; box[i].y = ya;
- X if (i+1 == PCOUNT) break;
- X box[i+1].x = xb; box[i+1].y = ya;
- X box[i+2].x = xb; box[i+2].y = yb;
- X box[i+3].x = xa; box[i+3].y = yb;
- X }
- X doit = TRUE;
- X }
- X if (changed) {
- X int Hsize = (hsize - width_offset) / xinc;
- X int Vsize = (vsize - height_offset) / yinc;
- X int pos = 3;
- X
- X changed = FALSE;
- X text[nz - 7] = (Hsize>99) ? (Hsize / 100 + zero) : ' ';
- X text[nz - 6] = (Hsize>9) ? ((Hsize / 10) % 10 + zero) : ' ';
- X text[nz - 5] = Hsize % 10 + zero;
- X if (Vsize>99) text[nz - pos--] = Vsize / 100 + zero;
- X if (Vsize>9) text[nz - pos--] = (Vsize / 10) % 10 + zero;
- X text[nz - pos--] = Vsize % 10 + zero;
- X while (pos>0) text[nz - pos--] = ' ';
- X XDrawImageString(dpy, pop, PopGC, IBW, IBW+PFontInfo->ascent,
- X text, nz);
- X }
- X if (doit) {
- X XDrawLines(dpy, RootWindow(dpy, scr), invertGC, box, PCOUNT,
- X CoordModeOrigin);
- X }
- X if (XPending(dpy) &&
- X XCheckMaskEvent(dpy, ButtonPressMask|ButtonReleaseMask, &e)) {
- X if ((chosen < 0) && (e.type == ButtonPress)) {
- X x1 = x2 = ((XButtonEvent *)&e)->x;
- X y1 = y2 = ((XButtonEvent *)&e)->y;
- X chosen = ((XButtonEvent *)&e)->button;
- X if (chosen == Button2)
- X change_cursor = TRUE;
- X }
- X else if ((e.type == ButtonRelease) &&
- X ((((XButtonEvent *)&e)->button) == chosen)) {
- X x2 = ((XButtonEvent *)&e)->x;
- X y2 = ((XButtonEvent *)&e)->y;
- X stop = TRUE;
- X }
- X else
- X XQueryPointer (dpy, RootWindow(dpy, scr), &root,
- X &subw, &rootx, &rooty, &x2, &y2, &mask);
- X }
- X else XQueryPointer (dpy, RootWindow(dpy, scr), &root,
- X &subw, &rootx, &rooty, &x2, &y2, &mask);
- X if (change_cursor) {
- X if ((x2 >= x1) && (y2 >= y1) &&
- X current_cursor != lr) {
- X XChangeActivePointerGrab (dpy, events, lr, CurrentTime );
- X current_cursor = lr;
- X }
- X else if ((x2 >= x1) && (y2 < y1) &&
- X current_cursor != ur) {
- X XChangeActivePointerGrab (dpy, events, ur, CurrentTime );
- X current_cursor = ur;
- X }
- X else if ((x2 < x1) && (y2 >= y1) &&
- X current_cursor != ll) {
- X XChangeActivePointerGrab (dpy, events, ll, CurrentTime );
- X current_cursor = ll;
- X }
- X else if ((x2 < x1) && (y2 < y1) &&
- X (current_cursor != ul)) {
- X XChangeActivePointerGrab (dpy, events, ul, CurrentTime );
- X current_cursor = ul;
- X }
- X }
- X if (chosen != Button2) {
- X x1 = x2;
- X y1 = y2;
- X if (chosen >= 0) {
- X x2 = defwidth;
- X if (chosen == Button1)
- X y2 = defheight;
- X else
- X y2 = (DisplayHeight(dpy, scr) - y1);
- X x2 = x1 + x2;
- X y2 = y1 + y2;
- X }
- X }
- X
- X dx = max(min(abs (x2 - x1), maxwidth), minwidth);
- X dx = makemult(dx-minwidth, xinc)+minwidth;
- X dy = max(min(abs(y2 - y1), maxheight), minheight);
- X dy = makemult(dy-minheight, yinc)+minheight;
- X
- X if (hints->flags & PAspect) {
- X if ((dx * hints->max_aspect.y > dy * hints->max_aspect.x)) {
- X delta = makemult((dx * hints->max_aspect.y /
- X hints->max_aspect.x) - dy, yinc);
- X if ((dy + delta) <= maxheight)
- X dy += delta;
- X else {
- X delta = makemult(dx - hints->max_aspect.x
- X * dy/hints->max_aspect.y, xinc);
- X if ((dx - delta) >= minwidth)
- X dx -= delta;
- X }
- X }
- X if (dx * hints->min_aspect.y < dy * hints->min_aspect.x) {
- X delta = makemult((hints->min_aspect.x *
- X dy/hints->min_aspect.y) - dx, xinc);
- X if (dx + delta <= maxwidth)
- X dx += delta;
- X else {
- X delta = makemult(dy - (dx * hints->min_aspect.y /
- X hints->min_aspect.x), yinc);
- X if ((dy - delta) >= minheight)
- X dy -= delta;
- X }
- X }
- X
- X }
- X
- X if (dx != hsize) {
- X hsize = dx;
- X changed = TRUE;
- X }
- X if (dy != vsize) {
- X vsize = dy;
- X changed = TRUE;
- X }
- X if (x2 < x1)
- X x2 = x1 - dx;
- X else
- X x2 = x1 + dx;
- X
- X if (y2 < y1)
- X y2 = y1 - dy;
- X else
- X y2 = y1 + dy;
- X }
- X XUngrabPointer(dpy, CurrentTime);
- X
- X XDestroyWindow (dpy, pop);
- X XFreeCursor (dpy, ur);
- X XFreeCursor (dpy, ul);
- X XFreeCursor (dpy, lr);
- X XFreeCursor (dpy, ll);
- X free(name);
- X free(text);
- X *x = min(x1, x2);
- X *y = min(y1, y2);
- X *width = hsize;
- X *height = vsize;
- X XSync(dpy, FALSE);
- X Leave_void
- X}
- END_OF_FILE
- if test 12196 -ne `wc -c <'RubberBand.c'`; then
- echo shar: \"'RubberBand.c'\" unpacked with wrong size!
- fi
- # end of 'RubberBand.c'
- fi
- if test -f 'menus/rtlmenu.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'menus/rtlmenu.c'\"
- else
- echo shar: Extracting \"'menus/rtlmenu.c'\" \(9335 characters\)
- sed "s/^X//" >'menus/rtlmenu.c' <<'END_OF_FILE'
- X
- X#ifndef lint
- X static char sccs_id[] = "@(#)rtlmenu.c 2.1 12/16/87 Siemens Corporate Research and Support, Inc.";
- X#endif
- X
- X
- X/*
- X RTL Menu Package Version 1.0
- X by Joe Camaratta and Mike Berman, Siemens RTL, Princeton NJ, 1987
- X
- X rtlmenu.c: interface level for menu package
- X */
- X
- X#include "X11/copyright.h"
- X/*
- X *
- X * Copyright 1987, 1988 by Ardent Computer Corporation, Sunnyvale, Ca.
- X *
- X * Copyright 1987 by Jordan Hubbard.
- X *
- X *
- X * All Rights Reserved
- X *
- X * Permission to use, copy, modify, and distribute this software and its
- X * documentation for any purpose and without fee is hereby granted,
- X * provided that the above copyright notice appear in all copies and that
- X * both that copyright notice and this permission notice appear in
- X * supporting documentation, and that the name of Ardent Computer
- X * Corporation or Jordan Hubbard not be used in advertising or publicity
- X * pertaining to distribution of the software without specific, written
- X * prior permission.
- X *
- X */
- X
- X/*
- X
- X Copyright 1987 by
- X Siemens Corporate Research and Support, Inc., Princeton, New Jersey
- X
- X Permission to use, copy, modify, and distribute this software
- X and its documentation for any purpose and without fee is
- X hereby granted, provided that the above copyright notice
- X appear in all copies and that both that copyright notice and
- X this permission notice appear in supporting documentation, and
- X that the name of Siemens not be used in advertising or
- X publicity pertaining to distribution of the software without
- X specific, written prior permission. Siemens makes no
- X representations about the suitability of this software for any
- X purpose. It is provided "as is" without express or implied
- X warranty.
- X
- X */
- X
- X#include <stdio.h>
- X#include "X11/Xlib.h"
- X
- X#include "menu.h"
- X#include "menu.def.h"
- X#include "menu.ext.h"
- X#include "rtlmenu.h"
- X#include "dbug.h"
- X
- Xextern Display *dpy;
- Xextern int scr;
- X
- Xstatic RTLPoint menu_pos;
- Xstatic int initialized = 0;
- X
- Xvoid RTLMenu_Initialize (options_mask)
- XMenuOptionsMask options_mask;
- X{
- X Entry("RTLMenu_Initialize")
- X
- X if (initialized)
- X return;
- X initialized = 1;
- X InitMenu ("awm", options_mask);
- X Leave_void
- X}
- X
- X/* ------------------------------------------------------------ */
- XRTLMenu RTLMenu_Create()
- X{
- X Entry("RTLMenu_Create")
- X /* Create a menu with no name, not in inverse video. */
- X
- X Leave((RTLMenu)NewMenu())
- X}
- X
- X/* ------------------------------------------------------------ */
- Xvoid RTLMenu_Destroy( menu )
- XRTLMenu menu;
- X{
- X Entry("RTLMenu_Destroy")
- X DisposeMenu ((Menu*) menu);
- X Leave_void
- X}
- X
- X/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
- X
- Xpointer RTLMenu_Data( menu, item )
- X/*ARGSUSED*/
- XRTLMenu menu;
- XRTLMenuItem item;
- X{
- X Entry("RTLMenu_Data")
- X Leave(ItemData((MenuItem*)item))
- X}
- X
- X/* ------------------------------------------------------------ */
- X
- XRTLMenu RTLMenu_Get_Submenu( menu, str )
- XRTLMenu menu;
- Xchar *str;
- X{
- X MenuItem *item = MenuItemByName ((Menu*) menu, str);
- X
- X Entry("RTLMenu_Get_Submenu")
- X
- X if (!ItemIsNull(item))
- X Leave((RTLMenu)ItemSubmenu(item))
- X Leave(0)
- X}
- X
- X/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
- X
- X/*ARGSUSED*/
- Xstatic void RTLMenu_Client_Send( menu, item )
- XRTLMenu menu;
- XRTLMenuItem item;
- X{
- X Entry("RTLMenu_Client_Send")
- X
- X printf ("RTLMenu_Client_Send not yet implemented for X, string = \"%s\"\n",
- X (char*) item);
- X Leave_void
- X}
- X
- X/* ------------------------------------------------------------ */
- X
- XRTLMenuItem RTLMenu_Append_String( menu, str, strval )
- XRTLMenu menu;
- Xchar *str;
- Xchar *strval;
- X{
- X MenuItem *item = AddMenuItem((Menu*)menu, str, (char *)NULL);
- X
- X Entry("RTLMenu_Append_String")
- X
- X ItemCallback(item) = (Callback)RTLMenu_Client_Send;
- X ItemData(item) = (pointer) strval;
- X Leave((RTLMenuItem)item)
- X}
- X
- X/* ------------------------------------------------------------ */
- X
- XRTLMenuItem RTLMenu_Append_Callback( menu, backproc )
- XRTLMenu menu;
- XVoidFunc backproc;
- X{
- X MenuItem *item = AddMenuItem((Menu*)menu, "", (char *)NULL);
- X
- X Entry("RTLMenu_Append_Callback")
- X
- X ItemGenerator(item) = (Callback)backproc;
- X
- X Leave((RTLMenuItem)item)
- X}
- X
- X/* ------------------------------------------------------------ */
- X
- XRTLMenuItem RTLMenu_Append_Call( menu, str, pix, proc, ptrval )
- XRTLMenu menu;
- Xchar *str;
- Xchar *pix;
- XVoidFunc proc;
- Xpointer ptrval;
- X{
- X MenuItem *item = AddMenuItem((Menu*)menu, str, pix);
- X
- X Entry("RTLMenu_Append_Call")
- X
- X ItemCallback(item) = proc;
- X ItemData(item) = ptrval;
- X
- X Leave((RTLMenuItem)item)
- X}
- X
- X/* ------------------------------------------------------------ */
- X
- XRTLMenuItem RTLMenu_Append_Checkback( menu, str, pix, checkproc, proc, ptrval )
- XRTLMenu menu;
- Xchar *str; /* Menu string */
- Xchar *pix;
- XBoolean (*checkproc) (); /* Boolean function called when menu entry
- X is about to be displayed. If true, then
- X the item appears checked; if false, then
- X it does not */
- XVoidFunc proc; /* function to be called when the item
- X is selected */
- Xpointer ptrval; /* data associated with this item */
- X{
- X MenuItem *item = AddMenuItem((Menu*)menu, str, pix);
- X
- X Entry("RTLMenu_Append_Checkback")
- X
- X ItemCallback(item) = proc;
- X ItemData(item) = ptrval;
- X ItemCheckproc(item) = checkproc;
- X
- X Leave((RTLMenuItem)item)
- X}
- X/* ------------------------------------------------------------ */
- X
- XRTLMenuItem RTLMenu_Append_Submenu( menu, str, pix, submenu )
- XRTLMenu menu;
- Xchar *str;
- Xchar *pix;
- XRTLMenu submenu;
- X{
- X MenuItem *item = AddMenuItem((Menu*)menu, str, pix);
- X
- X Entry("RTLMenu_Append_Submenu")
- X
- X ItemSubmenu(item) = (Menu*)submenu;
- X
- X Leave((RTLMenuItem)item)
- X}
- X
- X/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
- X
- Xvoid RTLMenu_Replace_Data_Keyed_String( menu, data, str )
- XRTLMenu menu;
- Xpointer data;
- Xchar *str;
- X{
- X MenuItem *item = MenuItemByName((Menu*) menu, str);
- X
- X Entry("RTLMenu_Replace_Keyed_String")
- X
- X if (!ItemIsNull(item))
- X ItemData(item) = data;
- X Leave_void
- X}
- X
- X/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
- X
- Xvoid RTLMenu_Activate_Entry( menu, item )
- XRTLMenu menu;
- XRTLMenuItem item;
- X{
- X Entry("RTLMenu_Activate_Entry")
- X
- X (void)SetItemDisable((Menu*)menu, (MenuItem*)item, FALSE);
- X Leave_void
- X}
- X
- X/* ------------------------------------------------------------ */
- X
- Xvoid RTLMenu_Inactivate_Entry( menu, item )
- XRTLMenu menu;
- XRTLMenuItem item;
- X{
- X Entry("RTLMenu_Inactivate_Entry")
- X
- X (void)SetItemDisable((Menu*)menu, (MenuItem*)item, TRUE);
- X Leave_void
- X}
- X
- Xvoid RTLMenu_Label_Entry( menu, item )
- XRTLMenu menu;
- XRTLMenuItem item;
- X{
- X Entry("RTLMenu_Label_Entry")
- X
- X (void)SetItemDeaf((Menu*)menu, (MenuItem*)item, TRUE);
- X Leave_void
- X}
- X
- X/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
- X
- XBoolean RTLMenu_Has_Data( menu, val )
- XRTLMenu menu;
- Xpointer val;
- X{
- X MenuItem *item = MenuItemByData((Menu*)menu, val);
- X Entry("RTLMenu_Has_Data")
- X
- X Leave(!ItemIsNull(item))
- X}
- X
- X/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
- X
- Xvoid RTLMenu_Delete_Entries( menu )
- XRTLMenu menu;
- X{
- X Entry("RTLMenu_Delete_Entries")
- X
- X while (DisposeItem((Menu*)menu, MenuItems((Menu*)menu)));
- X Leave_void
- X}
- X
- X/* ------------------------------------------------------------ */
- X
- Xvoid RTLMenu_Delete_String( menu, str )
- XRTLMenu menu;
- Xchar *str;
- X{
- X MenuItem *item = MenuItemByName((Menu*) menu, str);
- X
- X Entry("RTLMenu_Delete_String");
- X
- X if (!ItemIsNull(item))
- X (void) DisposeItem ((Menu*)menu, item);
- X Leave_void
- X}
- X
- X/* ------------------------------------------------------------ */
- X
- Xvoid RTLMenu_Delete_Data( menu, val )
- XRTLMenu menu;
- Xpointer val;
- X{
- X MenuItem *item = MenuItemByData((Menu*)menu, val);
- X
- X Entry("RTLMenu_Delete_Data");
- X
- X if (!ItemIsNull(item))
- X (void) DisposeItem((Menu*)menu, item);
- X Leave_void
- X}
- X
- X/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
- X
- X/*ARGSUSED*/
- Xvoid RTLMenu_Box( menu )
- XRTLMenu menu;
- X{
- X /* Commented out */
- X}
- X
- X/* ------------------------------------------------------------ */
- X
- X/*ARGSUSED*/
- Xvoid RTLMenu_Enter( menu, butnum, buttime, base_window, pos )
- XRTLMenu menu;
- Xint butnum;
- XTime buttime;
- XWindow base_window;
- XRTLPoint pos;
- X{
- X MenuItem *selected;
- X
- X Entry("RTLMenu_Enter")
- X
- X menu_pos = pos;
- X selected = TrackMenu ((Menu*) menu, menu_pos.x, menu_pos.y,
- X butnum, base_window, buttime);
- X if (!ItemIsNull(selected))
- X (ItemCallback(selected)) (menu, selected, base_window);
- X Leave_void
- X}
- X/* ------------------------------------------------------------ */
- X
- XRTLPoint RTLMenu_Entry_Pos()
- X{
- X Entry("RTLMenu_Entry_Pos")
- X /* menu_pos is a global static that gets set by the call to */
- X /* XQueryPointer that is used by the TrackMenu call. */
- X
- X Leave(menu_pos)
- X}
- X
- X
- Xvoid RTLMenu_Generate_Items(menu, proc)
- X/* apply VoidFunc proc to each item in the menu, with */
- X/* arguments menu and menuItem */
- XRTLMenu menu;
- XVoidFunc proc;
- X{
- X MenuItem *item;
- X
- X Entry("RTLMenu_Generate_Items")
- X
- X for (item = MenuItems((Menu*)menu);
- X !ItemIsNull(item); item = ItemNext(item))
- X {
- X (proc)((RTLMenu)menu, (RTLMenuItem)item);
- X }
- X Leave_void
- X}
- END_OF_FILE
- if test 9335 -ne `wc -c <'menus/rtlmenu.c'`; then
- echo shar: \"'menus/rtlmenu.c'\" unpacked with wrong size!
- fi
- # end of 'menus/rtlmenu.c'
- fi
- echo shar: End of archive 7 \(of 12\).
- cp /dev/null ark7isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 12 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- --
- Mike Wexler(wyse!mikew) Phone: (408)433-1000 x1330
- Moderator of comp.sources.x
-